In [1]:
import pandas as pd
import numpy as np
from datetime import timedelta
import altair as alt
alt.data_transformers.enable("vegafusion")
Out[1]:
DataTransformerRegistry.enable('vegafusion')
Grid Savers: Potential Benifits to Utilize V2G¶
Using a Vehicle to Grid (V2G) system, utilities can benifit from lower residential demands during peak hours, which cuts the cost of purchasing electricity in the wholesale power market. In this report, we are interested in simulating the implementastion of such technology.
Assumptions¶
We are assuming:
- The capacity of hardware, software, and regulation is supportive for this technology to implement
- The reduce in demand will not effect wholesale electricity pricing
Data¶
- Local Marginal Price (LMP) of the Day Ahead Market (DAM) in CAISO on May 5th and May6th.
- Retrieved throught CAISO's OASIS Website
- Preprocessed with
preprocess.ipynb - Loaded as
allNodein this notebook
- LMP of DAM at
placeholder- Retrieved throught ...
- Loaded as
placeholderin this notebook
- On average, American drivers drive 30.1 miles everyday.
- For the charger side: We are using the Tesla Wall Connector that has a 11.5 kW/h output, which is equal to 44 miles. We assume the power input is the same rate.
- For the EV/ battery side: Below is the Useable Battery Capacity of Full Electric Vehicles (Tesla)
| Model | Useable Battery Capacity (kWh) |
|---|---|
| S Dual Motor | 95 |
| S Plaid | 95 |
| X Dual Motor | 95 |
| X Plaid | 95 |
| Y Long Range AWD | 75 |
| Y Long Range AWD Launch Series | 75 |
| Y Long Range RWD | 75 |
| 3 Performance | 75 |
| 3 Long Range Dual Motor | 75 |
| 3 Long Range RWD | 75 |
| Y RWD | 60 |
| 3 | 57.5 |
EDA¶
In [2]:
allNode = pd.read_csv('data/0506pre.csv')
allNode['INTERVALSTARTTIME'] = pd.to_datetime(allNode['INTERVALSTARTTIME'])
allNode.head()
Out[2]:
| OPR_DT | NODE | MW | INTERVALSTARTTIME | INTERVALENDTIME | Hour_Label | |
|---|---|---|---|---|---|---|
| 0 | 2025-05-05 | AFPR_1_TOT_GEN-APND | 34.41489 | 2025-05-05 00:00:00 | 2025-05-05 01:00:00 | 00:00-01:00 |
| 1 | 2025-05-05 | AFPR_1_TOT_GEN-APND | 34.37762 | 2025-05-05 01:00:00 | 2025-05-05 02:00:00 | 01:00-02:00 |
| 2 | 2025-05-05 | AFPR_1_TOT_GEN-APND | 34.11542 | 2025-05-05 02:00:00 | 2025-05-05 03:00:00 | 02:00-03:00 |
| 3 | 2025-05-05 | AFPR_1_TOT_GEN-APND | 33.97113 | 2025-05-05 03:00:00 | 2025-05-05 04:00:00 | 03:00-04:00 |
| 4 | 2025-05-05 | AFPR_1_TOT_GEN-APND | 34.23300 | 2025-05-05 04:00:00 | 2025-05-05 05:00:00 | 04:00-05:00 |
In [3]:
chart_allNode = alt.Chart(allNode).mark_line(interpolate='step-after').encode(
x=alt.X('INTERVALSTARTTIME:T', title='Time Interval'),
y=alt.Y('MW:Q', title='Price ($/MWh)'),
color='NODE:N',
tooltip=['NODE', 'Hour_Label', 'MW']
).properties(
title='Day-Ahead LMP ($/MWh) Over Time by Node',
width=800,
height=400
).interactive()
chart_allNode
Out[3]: